/*
 * vim: filetype=c:fenc=utf-8:ts=4:et:sw=4:sts=4
 */
#include <inttypes.h>
#include <stddef.h>
#include <math.h>
#include <stdio.h>
#include <sys/mman.h>
#include <syscall.h>
#include <netinet/in.h>
#include <stdlib.h>
#include<time.h>
#include "graphics.h"




// 睡眠i毫秒
void msleep(int i)
{
	// nanosleep所用的结构体
	struct timespec tim;
	// tv_nsec-tv_sec即休眠纳秒数
	tim.tv_sec = 0, tim.tv_nsec = 1e6L * i;
	nanosleep(&tim, 0);
}


//实验5：内存分配器
int Lab5_allocator()
{
	printf("#######################\n");

	test_allocator();




	return 0;
}


extern void *tlsf_create_with_pool(void* mem, size_t bytes);
extern void *g_heap;

/**
 * GCC insists on __main
 *    http://gcc.gnu.org/onlinedocs/gccint/Collect2.html
 */
void __main()
{
    size_t heap_size = 32*1024*1024;
    void  *heap_base = mmap(NULL, heap_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
	g_heap = tlsf_create_with_pool(heap_base, heap_size);
}


/**
 * 第一个运行在用户模式的线程所执行的函数
 */
void main(void *pv)
{
    printf("task #%d: I'm the first user task(pv=0x%08x)!\r\n",
            task_getid(), pv);

    //TODO: Your code goes here

    //实验2：多线程任务，封装于"./usermod/mythread.h"
    // Lab2_Multithreading();

	//实验3：调试调度器
	// Lab3_Scheduler();

	// //实验4:信号量
	// Lab4_Sem();


	//实验5：内存分配器
	Lab5_allocator();



    while(1)
        ;
    task_exit(0);
}

